package ufc.si.pet.dao.implementacoes;

import java.util.List;

import javax.persistence.NoResultException;
import javax.persistence.Query;

import org.hibernate.Criteria;

import ufc.si.pet.dao.interfaces.AdministradorAtividadeDAO;
import ufc.si.pet.entidades.AdministradorAtividade;
import ufc.si.pet.entidades.Atividade;
import ufc.si.pet.exceptions.ErroLoginException;

public class AdministradorAtividadeJpaDAO extends GenericJpaDAO<AdministradorAtividade> implements AdministradorAtividadeDAO{

	public AdministradorAtividadeJpaDAO(){
		super();
		this.persistentClass = AdministradorAtividade.class;
	}

	@Override
	public boolean verificaLoginExistente(String login) {
		Query query = entityManager.createQuery("SELECT admin FROM AdministradorAtividade admin WHERE admin.login=?1");
		
		try{
			query.setParameter(1, login);
			AdministradorAtividade admin = (AdministradorAtividade) query.getSingleResult();
			return true;
		}catch(NoResultException e){
			return false;
		}
		
	
	}

	@Override
	public boolean verificaEmailExistente(String email) {
		
		Query query = entityManager.createQuery("SELECT admin FROM AdministradorAtividade admin WHERE admin.email=?1");
		
		try{
			query.setParameter(1, email);
			AdministradorAtividade admin = (AdministradorAtividade) query.getSingleResult();
			return true;
		}catch(NoResultException e){
			return false;
		}
		
	}

	@Override
	public AdministradorAtividade getAdminByLoginSenha(String login, String senha) {
		Query query = entityManager.createQuery("SELECT admin FROM AdministradorAtividade admin WHERE admin.login = ?1 AND admin.senha = ?2");
		try{
			query.setParameter(1, login);
			query.setParameter(2, senha);
			AdministradorAtividade admin = (AdministradorAtividade) query.getSingleResult();
			return admin;
		}catch(NoResultException e){
			throw new ErroLoginException("Usuário ou senha inválido.");
		}
	}

	@Override
	public List<Atividade> getAtividadesByAdmin(AdministradorAtividade admin) {
		// TODO Auto-generated method stub
		Query query = entityManager.createQuery("SELECT atividade FROM Atividade atividade WHERE atividade.administrador = :administrador");
		try{
			query.setParameter("administrador", admin);
			List<Atividade> atividades = query.getResultList();
			return atividades;
		}catch(NoResultException e){
			return null;
		}
	}

}
